2/****************************************************************
    3 *                                                              *
    4 * Event Recognition for City Transport Management (CTM)	* 
    5 *                                                              *
    6 *                                                              *
    7 * Implemented in YAP						*
    8 * Alexander Artikis						*
    9 *								*
   10 ****************************************************************/
   11
   12
   13/********************************************************************** DECLARATIONS *******************************************************************************
   14 -Declare the entities of the event description: events, simple and statically determined fluents.
   15 -For each entity state if it is input or output (simple fluents are by definition output entities).
   16 -For each input/output entity state its index.
   17 -For input entities/statically determined fluents state whether the intervals will be collected into a list or built from time-points.
   18 -Declare the groundings of the fluents and output entities/events.
   19 -Declare the order of caching of output entities.
   20 *******************************************************************************************************************************************************************/
   21 
   22event(stop_enter(_,_,_,_)).				inputEntity(stop_enter(_,_,_,_)).			index(stop_enter(Id,_,_,_), 			Id).
   23event(stop_leave(_,_,_,_)).				inputEntity(stop_leave(_,_,_,_)).			index(stop_leave(Id,_,_,_), 			Id).
   24event(internal_temperature_change(_,_,_)).		inputEntity(internal_temperature_change(_,_,_)).	index(internal_temperature_change(Id,_,_), 	Id).
   25event(noise_level_change(_,_,_)).			inputEntity(noise_level_change(_,_,_)).			index(noise_level_change(Id,_,_), 		Id).
   26event(passenger_density_change(_,_,_)).			inputEntity(passenger_density_change(_,_,_)).		index(passenger_density_change(Id,_,_), 	Id).
   27
   28event(punctuality_change(_,_,punctual)).		outputEntity(punctuality_change(_,_,punctual)).		index(punctuality_change(Id,_,punctual),	Id).
   29event(punctuality_change(_,_,non_punctual)).		outputEntity(punctuality_change(_,_,non_punctual)).	index(punctuality_change(Id,_,non_punctual),	Id).
   30
   31simpleFluent(punctuality(_,_)=punctual).    		outputEntity(punctuality(_,_)=punctual).    		index(punctuality(Id,_)=punctual, 		Id).
   32simpleFluent(passenger_density(_,_)=high).		outputEntity(passenger_density(_,_)=high).		index(passenger_density(Id,_)=high, 		Id).
   33simpleFluent(noise_level(_,_)=high).			outputEntity(noise_level(_,_)=high).			index(noise_level(Id,_)=high, 			Id).
   34
   35simpleFluent(internal_temperature(_,_)=very_warm).	outputEntity(internal_temperature(_,_)=very_warm).	index(internal_temperature(Id,_)=very_warm, 	Id).
   36simpleFluent(internal_temperature(_,_)=very_cold).	outputEntity(internal_temperature(_,_)=very_cold).	index(internal_temperature(Id,_)=very_cold, 	Id).
   37
   38sDFluent(abrupt_acceleration(_,_)=abrupt).		inputEntity(abrupt_acceleration(_,_)=abrupt).		index(abrupt_acceleration(Id,_)=abrupt, 	Id).
   39sDFluent(abrupt_acceleration(_,_)=very_abrupt).		inputEntity(abrupt_acceleration(_,_)=very_abrupt).	index(abrupt_acceleration(Id,_)=very_abrupt, 	Id).
   40sDFluent(abrupt_deceleration(_,_)=abrupt).		inputEntity(abrupt_deceleration(_,_)=abrupt).		index(abrupt_deceleration(Id,_)=abrupt, 	Id).
   41sDFluent(abrupt_deceleration(_,_)=very_abrupt).		inputEntity(abrupt_deceleration(_,_)=very_abrupt).	index(abrupt_deceleration(Id,_)=very_abrupt, 	Id).
   42sDFluent(sharp_turn(_,_)=sharp).			inputEntity(sharp_turn(_,_)=sharp).			index(sharp_turn(Id,_)=sharp, 			Id).
   43sDFluent(sharp_turn(_,_)=very_sharp).			inputEntity(sharp_turn(_,_)=very_sharp).		index(sharp_turn(Id,_)=very_sharp, 		Id).
   44
   45sDFluent(punctuality(_,_)=non_punctual). 	   	outputEntity(punctuality(_,_)=non_punctual).    	index(punctuality(Id,_)=non_punctual, 		Id).    
   46sDFluent(driving_style(_,_)=unsafe). 			outputEntity(driving_style(_,_)=unsafe). 		index(driving_style(Id,_)=unsafe, 		Id). 
   47sDFluent(driving_style(_,_)=uncomfortable). 		outputEntity(driving_style(_,_)=uncomfortable). 	index(driving_style(Id,_)=uncomfortable, 	Id).
   48
   49sDFluent(driving_quality(_,_)=high). 			outputEntity(driving_quality(_,_)=high). 		index(driving_quality(Id,_)=high, 		Id).
   50sDFluent(driving_quality(_,_)=medium). 			outputEntity(driving_quality(_,_)=medium). 		index(driving_quality(Id,_)=medium, 		Id).
   51sDFluent(driving_quality(_,_)=low). 			outputEntity(driving_quality(_,_)=low). 		index(driving_quality(Id,_)=low, 		Id).
   52
   53sDFluent(passenger_comfort(_,_)=reducing). 		outputEntity(passenger_comfort(_,_)=reducing). 		index(passenger_comfort(Id,_)=reducing, 	Id). 
   54sDFluent(driver_comfort(_,_)=reducing). 		outputEntity(driver_comfort(_,_)=reducing). 		index(driver_comfort(Id,_)=reducing, 		Id).
   55sDFluent(passenger_satisfaction(_,_)=reducing). 	outputEntity(passenger_satisfaction(_,_)=reducing). 	index(passenger_satisfaction(Id,_)=reducing, 	Id). 
   56
   57% for input entities/statically determined fluents state whether 
   58% the intervals will be collected into a list or built from given time-points
   59
   60collectIntervals(abrupt_acceleration(_,_)=abrupt).
   61collectIntervals(abrupt_acceleration(_,_)=very_abrupt).
   62collectIntervals(abrupt_deceleration(_,_)=abrupt).
   63collectIntervals(abrupt_deceleration(_,_)=very_abrupt).
   64collectIntervals(sharp_turn(_,_)=sharp).
   65collectIntervals(sharp_turn(_,_)=very_sharp).
   66
   67% define the groundings of the fluents and output entities/events
   68
   69grounding(abrupt_acceleration(Id,VehicleType)=abrupt) 		:- vehicle(Id, VehicleType). 
   70grounding(abrupt_acceleration(Id,VehicleType)=very_abrupt) 	:- vehicle(Id, VehicleType). 
   71grounding(abrupt_deceleration(Id,VehicleType)=abrupt) 		:- vehicle(Id, VehicleType). 
   72grounding(abrupt_deceleration(Id,VehicleType)=very_abrupt) 	:- vehicle(Id, VehicleType). 
   73grounding(sharp_turn(Id,VehicleType)=sharp) 			:- vehicle(Id, VehicleType). 
   74grounding(sharp_turn(Id,VehicleType)=very_sharp) 		:- vehicle(Id, VehicleType).
   75grounding(punctuality(Id,VehicleType)=punctual) 		:- vehicle(Id, VehicleType).   
   76grounding(punctuality(Id,VehicleType)=non_punctual) 		:- vehicle(Id, VehicleType).
   77grounding(punctuality_change(Id,VehicleType,punctual)) 		:- vehicle(Id, VehicleType).
   78grounding(punctuality_change(Id,VehicleType,non_punctual)) 	:- vehicle(Id, VehicleType).
   79grounding(passenger_density(Id,VehicleType)=high) 		:- vehicle(Id, VehicleType).
   80grounding(noise_level(Id,VehicleType)=high) 			:- vehicle(Id, VehicleType).
   81grounding(internal_temperature(Id,VehicleType)=very_warm) 	:- vehicle(Id, VehicleType).
   82grounding(internal_temperature(Id,VehicleType)=very_cold) 	:- vehicle(Id, VehicleType).
   83grounding(driving_style(Id,VehicleType)=unsafe) 		:- vehicle(Id, VehicleType).
   84grounding(driving_style(Id,VehicleType)=uncomfortable) 		:- vehicle(Id, VehicleType).
   85grounding(driving_quality(Id,VehicleType)=high) 		:- vehicle(Id, VehicleType).
   86grounding(driving_quality(Id,VehicleType)=medium) 		:- vehicle(Id, VehicleType).
   87grounding(driving_quality(Id,VehicleType)=low) 			:- vehicle(Id, VehicleType). 
   88grounding(passenger_comfort(Id,VehicleType)=reducing) 		:- vehicle(Id, VehicleType).
   89grounding(driver_comfort(Id,VehicleType)=reducing) 		:- vehicle(Id, VehicleType).
   90grounding(passenger_satisfaction(Id,VehicleType)=reducing) 	:- vehicle(Id, VehicleType).
   91
   92% cachingOrder should be defined for all output entities
   93
   94cachingOrder(punctuality(_,_)=punctual).    
   95cachingOrder(punctuality(_,_)=non_punctual).
   96
   97cachingOrder(punctuality_change(_,_,punctual)).    
   98cachingOrder(punctuality_change(_,_,non_punctual)).    
   99
  100cachingOrder(passenger_density(_,_)=high).
  101cachingOrder(noise_level(_,_)=high).
  102
  103cachingOrder(internal_temperature(_,_)=very_warm).
  104cachingOrder(internal_temperature(_,_)=very_cold).
  105
  106cachingOrder(driving_style(_,_)=unsafe). 
  107cachingOrder(driving_style(_,_)=uncomfortable). 
  108
  109cachingOrder(driving_quality(_,_)=high).
  110cachingOrder(driving_quality(_,_)=medium).
  111cachingOrder(driving_quality(_,_)=low).
  112
  113cachingOrder(passenger_comfort(_,_)=reducing). 
  114
  115cachingOrder(driver_comfort(_,_)=reducing).
  116
  117cachingOrder(passenger_satisfaction(_,_)=reducing)